package com.spdd.mt.common.util;

import cn.hutool.core.util.StrUtil;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class MoneyUtil {

    private static final Pattern NUMERIC_PATTERN = Pattern.compile("^[0-9]+$");



    /**
     * 是否是数字
     *
     * @param str 字符串
     */
    public static boolean isNumeric(String str) {
        if (StrUtil.isBlank(str)) {
            return false;
        }
        Matcher matcher = NUMERIC_PATTERN.matcher(str);
        return matcher.matches();
    }

    /**
     * 分转元
     *
     * @param fenStr 分字符串
     */
    public static String fenToYuan(String fenStr) {
        if (StrUtil.isBlank(fenStr)) {
            return fenStr;
        }
        long fen = Long.parseLong(fenStr);
        double yuan = fen / 100.0;
        return String.format("%.2f", yuan);
    }

    /**
     * 元转分
     *
     * @param yuanStr 元字符串
     */
    public static String yuanToFen(String yuanStr) throws NumberFormatException {
        if (StrUtil.isBlank(yuanStr)) {
            return yuanStr;
        }
        BigDecimal yuan = new BigDecimal(yuanStr);
        BigDecimal hao = yuan.multiply(new BigDecimal(100));
        return hao.setScale(0, RoundingMode.HALF_UP).toString();
    }

    public static String yuanToHao(String yuanStr) throws NumberFormatException {
        if (StrUtil.isBlank(yuanStr)) {
            return yuanStr;
        }
        BigDecimal yuan = new BigDecimal(yuanStr);
        BigDecimal hao = yuan.multiply(new BigDecimal(10000));
        return hao.setScale(0, RoundingMode.HALF_UP).toString();
    }


    public static String haoToYuan(String haoStr) {
        if (StrUtil.isBlank(haoStr)) {
            return haoStr;
        }
        BigDecimal haoBigDecimal = new BigDecimal(haoStr);
        BigDecimal yuanBigDecimal = haoBigDecimal.divide(new BigDecimal(10000));
        return yuanBigDecimal.setScale(2, RoundingMode.HALF_UP).toString();
    }

    public static String haoToFen(String haoStr) {
        if (StrUtil.isBlank(haoStr)) {
            return haoStr;
        }
        BigDecimal haoBigDecimal = new BigDecimal(haoStr);
        BigDecimal fenBigDecimal = haoBigDecimal.divide(new BigDecimal(100));
        return fenBigDecimal.setScale(2, RoundingMode.HALF_UP).toString();
    }

    public static String fenToHao(String fenStr) throws NumberFormatException {
        if (StrUtil.isBlank(fenStr)) {
            return fenStr;
        }
        BigDecimal fen = new BigDecimal(fenStr);
        BigDecimal hao = fen.multiply(new BigDecimal(100));
        return hao.setScale(0, RoundingMode.HALF_UP).toString();
    }

    // public static String discountedAmt(String amt, BigDecimal discount) {
    //     try {
    //         BigDecimal oriAmt = new BigDecimal(amt);
    //         BigDecimal discountedAmt = oriAmt.multiply(discount);
    //         return discountedAmt.setScale(0, RoundingMode.HALF_UP).toString();
    //     } catch (NumberFormatException e) {
    //         throw new BusinessException(ErrorCode.PARAM_ERROR);
    //     }
    // }
}
